﻿/*
 * HCC Robotica, Workshop Robot programmeren met C# 
 * Oefening : wo_09	Sensor waarde tonen met LED
 * Naam     : Hinnie
 * Versie   : september 2011
 */

using System;
using System.Threading;

using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;

using GHIElectronics.NETMF.Hardware;
using GHIElectronics.NETMF.FEZ;

namespace wo_09
{
    public class Program
    {
        public static void Main()
        {

            OutputPort LED = new OutputPort((Cpu.Pin)FEZ_Pin.Digital.LED, false);
            TristatePort LedLeft = new TristatePort((Cpu.Pin)FEZ_Pin.Digital.Di4, false, false, Port.ResistorMode.Disabled);
            TristatePort LedRight = new TristatePort((Cpu.Pin)FEZ_Pin.Digital.Di2, false, false, Port.ResistorMode.Disabled);
            if (LedLeft.Active)
                LedLeft.Active = false;             // set port to input
            if (LedRight.Active)
                LedRight.Active = false;
            AnalogIn SenLeft = new AnalogIn((AnalogIn.Pin)FEZ_Pin.AnalogIn.An7);
            AnalogIn SenRight = new AnalogIn((AnalogIn.Pin)FEZ_Pin.AnalogIn.An6);
            bool ledState = false;
            bool ledSwitch = false;
            const int loopTime = 5;
            const int flashTime = 200 / loopTime;
            const int SenThreshold = 500;           // drempel waarde

                                                    // het schakelen van de led wordt gedaan door de tristate port te wisselen van input naar output en andersom  
            int flashCount = 0;
            while (true)
            {
                if (SenLeft.Read() < SenThreshold)        
                {
                    if (LedLeft.Active == false)
                        LedLeft.Active = true;          // als uitgelezen waarde kleiner dan de drempel waarde dan led uit
                }
                else
                {
                    if (LedLeft.Active == true)
                        LedLeft.Active = false;         // als uitgelezen waarde groter of gelijk aan de drempel waarde dan led aan
                }
                if (SenRight.Read() < SenThreshold)     
                {
                    if (LedRight.Active == false)
                        LedRight.Active = true;
                }
                else
                {
                    if (LedRight.Active == true)
                        LedRight.Active = false;
                }
                if (flashCount++ >= flashTime)
                {
                    flashCount = 0;
                    ledState = !ledState;           // toggle LED state
                    LED.Write(ledState);            // Blink board LED
                }
                if (ledState)
                {
                    ledSwitch = !ledSwitch;
                    LED.Write(ledSwitch);           // less intensity onboard LED
                }
                Thread.Sleep(loopTime);
            }
        }
    }
}


